/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.upc.dew.proyecto.dao;

import pe.edu.upc.dew.proyecto.model.Medico;
import pe.edu.upc.dew.proyecto.model.Paciente;
import pe.edu.upc.dew.proyecto.model.Persona;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import pe.edu.upc.dew.proyecto.bd.Conexion;


/**
 *
 * @author Fernando
 */
public class PersonaDaoImpl  implements PersonaDao{

    private ServicioDao servicioDao;


    public Persona getPersonaPorUsername(String username){

        Persona persona = null; // =  new Persona();
        int coPersona;
        String tipo;

        Connection connection = null;
        Statement st = null;
        ResultSet rsUsuario = null;
        ResultSet rsPersona = null;
        ResultSet rsServicio = null;
        ResultSet rsMedico = null;
        ResultSet rsPaciente = null;

        try{
            connection= Conexion.obtenerConexion();
            st = connection.createStatement();
            rsUsuario = st.executeQuery("select * from USUARIO where username like '" + username + "'");
            if (rsUsuario.next()){
                coPersona = rsUsuario.getInt("coPersona");
                tipo = rsUsuario.getString("Tipo");

                rsPersona = st.executeQuery("select * from Persona where copersona ="+ Integer.toString(coPersona));
                if (rsPersona.next()){
                    if (tipo.equals("M")){
                        Medico medico = new Medico();
                        medico.setCoPersona(coPersona);
                        medico.setDocIdentidad(rsPersona.getString("docidentidad"));
                        medico.setApePaterno(rsPersona.getString("ApePaterno"));
                        medico.setApeMaterno(rsPersona.getString("ApeMaterno"));
                        medico.setNombre1(rsPersona.getString("Nombre1"));
                        medico.setNombre2(rsPersona.getString("Nombre2"));
                        medico.setSexo(rsPersona.getString("Sexo"));
                        medico.setFechaNacimiento( rsPersona.getDate("FechaNacimiento") );
                        medico.setDireccion(rsPersona.getString("Direccion"));
                        medico.setTelefono(rsPersona.getString("Telefono"));

                        rsMedico = st.executeQuery("select * from Medico where copersona ="+ Integer.toString(coPersona));
                        if (rsMedico.next()){
                            medico.setCoColeMed(rsMedico.getString("COCOLEMED"));
                            medico.setEspecialidad(rsMedico.getString("Especialidad"));

                            rsServicio = st.executeQuery("Select * from Servicio where copermedico ="+ Integer.toString(coPersona));

                            while (rsServicio.next()){
                                medico.getServicios().add( servicioDao.getServicioPorCodigo(
                                        rsServicio.getInt("coservicio")));
                            }

                            persona = (Persona) medico;
                        }
                    }
                    else{
                        //codigo para el paciente
                        Paciente paciente = new Paciente();
                        paciente.setCoPersona(coPersona);
                        paciente.setDocIdentidad(rsPersona.getString("docidentidad"));
                        paciente.setApePaterno(rsPersona.getString("ApePaterno"));
                        paciente.setApeMaterno(rsPersona.getString("ApeMaterno"));
                        paciente.setNombre1(rsPersona.getString("Nombre1"));
                        paciente.setNombre2(rsPersona.getString("Nombre2"));
                        paciente.setSexo(rsPersona.getString("Sexo"));
                        paciente.setFechaNacimiento( rsPersona.getDate("FechaNacimiento") );
                        paciente.setDireccion(rsPersona.getString("Direccion"));
                        paciente.setTelefono(rsPersona.getString("Telefono"));

                        rsPaciente = st.executeQuery("select * from Paciente where copersona ="+ Integer.toString(coPersona));
                        if (rsPaciente.next()){
                            paciente.setNumHistoria(rsPaciente.getInt("NumHistoria"));
                            rsServicio = st.executeQuery("Select * from Servicio where copersona ="+ Integer.toString(coPersona));

                            while (rsServicio.next()){
                                paciente.getServicios().add(
                                        servicioDao.getServicioPorCodigo(
                                        rsServicio.getInt("coservicio")));
                            }

                            persona = (Persona) paciente;
                        }
                    }
                }
            }
        }
        catch(Exception e){
        e.printStackTrace();
        }
        finally {
            Conexion.closeResultSet(rsUsuario);
            Conexion.closeResultSet(rsPersona);
            Conexion.closeResultSet(rsServicio);
            Conexion.closeResultSet(rsMedico);
            Conexion.closeResultSet(rsPaciente);
            Conexion.closeStatement(st);
            Conexion.closeConnection(connection);
        }
        return persona;
    }

    public void setServicioDao(ServicioDao serviciodao ){
        this.servicioDao = serviciodao;
    }
    public Persona getPersonaPorCopersona(int copersona) {
        return null;
    }
}
